// 定义购物车在本地存储中的键名
const CART_KEY = 'cart';
// 默认商品库存上限
const DEFAULT_STOCK = 99;

// 购物车服务对象
const CartService = {
  // 获取购物车数据
  getCart: () => {
    try {
      // 尝试从本地存储读取购物车数据，不存在则返回空数组
      return wx.getStorageSync(CART_KEY) || [];
    } catch (e) {
      // 捕获读取异常并打印错误日志
      console.error('读取购物车数据失败:', e);
      return [];
    }
  },

  // 保存购物车数据
  saveCart: (carts) => {
    try {
      // 过滤掉formattedPrice字段后存入本地存储
      wx.setStorageSync(CART_KEY, carts.map(item => {
        const { formattedPrice, ...rest } = item; // 使用对象解构排除格式化价格字段
        return rest;
      }));
    } catch (e) {
      // 捕获存储异常并打印错误日志
      console.error('存储购物车数据失败:', e);
    }
  },

  // 商品数据验证与格式化
  validateItem: (item) => ({
    id: item.id || Date.now().toString(),        // 生成唯一ID（兼容旧数据）
    brand: item.brand || '未知品牌',             // 默认品牌信息
    name: item.name || '未命名商品',             // 默认商品名称
    image: item.image || '/images/default-product.png', // 默认商品图片
    material: item.material || '暂无材质信息',    // 默认材质说明
    weight: item.weight || '--',                // 默认重量显示
    price: Math.max(0, Number(item.price) || 0), // 确保价格非负
    num: Math.max(1, Math.min(Number(item.num) || 1, item.stock || DEFAULT_STOCK)), // 限制购买数量范围
    stock: Math.max(0, Number(item.stock) || DEFAULT_STOCK), // 确保库存非负
    selected: !!item.selected,                  // 转换为布尔值
    formattedPrice: (Number(item.price) || 0).toFixed(2) // 格式化价格显示
  })
};

// 防抖函数（防止高频操作）
function debounce(func, delay = 300) {
  let timer;
  return function(...args) {
    clearTimeout(timer);  // 清除已有定时器
    timer = setTimeout(() => func.apply(this, args), delay); // 重新设置定时器
  };
}

// 页面逻辑
Page({
  // 页面初始数据
  data: {
    carts: [],            // 购物车商品列表
    totalPrice: '0.00',   // 选中商品总金额
    totalNum: 0,          // 选中商品总数
    selectAllStatus: false, // 全选状态
    hasList: false,       // 是否有商品列表
    hasSelectedItems: false // 是否有选中商品
  },

  // 页面显示生命周期
  onShow() {
    this.loadCartData();  // 每次页面显示时加载购物车数据
  },

  // 加载购物车数据
  loadCartData() {
    const rawCarts = CartService.getCart(); // 获取原始购物车数据
    const validatedCarts = rawCarts.map(CartService.validateItem); // 验证并格式化数据
    this.updateCarts(validatedCarts); // 更新页面数据
  },

  // 更新购物车数据
  updateCarts(newCarts) {
    // 计算全选状态（所有商品都被选中）
    const selectAllStatus = newCarts.length > 0 && newCarts.every(item => item.selected);
    // 检查是否有选中商品
    const hasSelectedItems = newCarts.some(item => item.selected);
    
    // 更新页面数据
    this.setData({
      carts: newCarts.map(item => ({
        ...item,
        formattedPrice: (item.price || 0).toFixed(2) // 重新计算格式化价格
      })),
      hasList: newCarts.length > 0, // 是否有商品
      selectAllStatus,             // 全选状态
      hasSelectedItems             // 是否有选中项
    }, () => {
      this.calculateTotal();        // 回调函数中计算总价
      CartService.saveCart(newCarts); // 持久化存储购物车数据
    });
  },

  // 计算总金额和总数
  calculateTotal() {
    let total = 0, count = 0;
    // 遍历选中商品进行累加
    this.data.carts.forEach(item => {
      if (item.selected) {
        total += item.price * item.num; // 单价×数量
        count += item.num;              // 总数累加
      }
    });
    
    // 更新页面显示数据
    this.setData({
      totalPrice: total.toFixed(2), // 保留两位小数
      totalNum: count
    });
  },

  // 切换单个商品选中状态（防抖处理）
  toggleSelect: debounce(function(e) {
    const index = e.currentTarget.dataset.index; // 获取商品索引
    const newCarts = [...this.data.carts];      // 创建新数组
    newCarts[index].selected = !newCarts[index].selected; // 切换选中状态
    this.updateCarts(newCarts); // 更新数据
  }),

  // 全选/反选操作
  toggleAll() {
    const newStatus = !this.data.selectAllStatus; // 取反当前状态
    const newCarts = this.data.carts.map(item => ({
      ...item,
      selected: newStatus // 批量设置选中状态
    }));
    this.updateCarts(newCarts);
  },

  // 修改商品数量（防抖处理）
  changeCount: debounce(function(e) {
    const { type, index } = e.currentTarget.dataset; // 获取操作类型和索引
    const newCarts = [...this.data.carts];
    const item = newCarts[index];
    
    // 增加数量（不超过库存）
    if (type === 'add' && item.num < item.stock) {
      item.num++;
    } 
    // 减少数量（不低于1）
    else if (type === 'minus' && item.num > 1) {
      item.num--;
    }
    
    this.updateCarts(newCarts);
  }),

  // 删除单个商品
  deleteItem(e) {
    wx.showModal({
      title: '确认删除',
      content: '确定要移出购物车吗？',
      success: (res) => {
        if (res.confirm) {  // 用户确认后执行
          const index = e.currentTarget.dataset.index;
          // 过滤掉当前索引的商品
          const newCarts = this.data.carts.filter((_, i) => i !== index);
          this.updateCarts(newCarts);
        }
      }
    });
  },

  // 批量删除选中商品
  deleteSelectedItems() {
    wx.showModal({
      title: '删除选中商品',
      content: `确定要删除选中的${this.data.totalNum}件商品吗？`,
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({ title: '删除中...' }); // 显示加载提示
          // 过滤掉选中商品
          const newCarts = this.data.carts.filter(item => !item.selected);
          this.updateCarts(newCarts);
          // 模拟异步操作后隐藏加载提示
          setTimeout(() => wx.hideLoading(), 500);
        }
      }
    });
  },

  goToCheckout() {
    if (!this.data.hasSelectedItems) {
      wx.showToast({
        title: '请选择商品',
        icon: 'none'
      });
      return;
    }
    
    const selectedItems = this.data.carts.filter(item => item.selected);
    wx.setStorageSync('checkoutItems', selectedItems);
    wx.navigateTo({
      url: '/pages/checkout/checkout'
    });
  },

  goShopping() {
    wx.switchTab({
      url: '/pages/qiugan/qiugan'
    });
  }
});